#include "commd.hpp"
using namespace std;


int main() {
    // 第0步：打开管道文件
    int fd = open(CHANNEL_NAME, O_WRONLY);
    if (fd < 0) {
        cerr << "errno:" << errno << "errnostring:" << strerror(errno) << endl;
        return -1;
    }
    cout << "打开管道文件成功" << endl;

    // 第1步：使用stok生成一个唯一的key
    key_t key = get_key();

    // 第2步：使用shmget获取共享内存
    int shmid = shmget(key, SIZE, IPC_CREAT);
    if (shmid == -1) {
        cerr << "errno:" << errno << "errnostring:" << strerror(errno) << endl;
        return -1;
    }
    cout << "获取共享内存成功, shmid=" << shmid << endl;

    // 第3步：使用shmat接口将当前进程挂接到共享内存上
    char* s = (char*)shmat(shmid, nullptr, 0);


    // 第4步：向共享内存中写
    for (char ch = 'a'; ch <= 'z'; ch++) {
        s[ch - 'a'] = ch;
        cout << "write: “" << ch << "” to sharememory" << endl;
        sleep(4);
        int code = 1;
        int n = write(fd, &code, sizeof(code));
        if (n == -1) {
            cerr << "errno:" << errno << "errnostring:" << strerror(errno) << endl;
            break;
        }
    }

    // 第5步：使用shmdt将当前进程与共享内存去关联
    shmdt(s);
    close(fd); // 关闭管道文件

    return 0;
}